#ifndef DEVICELOGDIALOG_H
#define DEVICELOGDIALOG_H

#include <QDialog>
#include <QCalendarWidget>
#include <QVector>
#include <string>
#include <QScrollBar>
#include <QIcon>
#include <QTextCharFormat>
#include <QLabel>
#include <QToolButton>
#include "../CommunicateDelegate/hmicommunicate.h"

#define LOG_FILE "/agvwork/AgvFundation/fundation/data/globalConfig/logFile/robotLog.dat"
#define XML_LOG_FILE "/agvwork/AgvFundation/fundation/data/globalConfig/logFile/robotLog.xml"

struct RobotIdName
{
    int robotId;
    QString robotName;
};

namespace Ui {
class DeviceLogDialog;
}

class DeviceLogDialog : public QDialog
{
    Q_OBJECT

public:
    explicit DeviceLogDialog(int styleId,QWidget *parent = 0);
    ~DeviceLogDialog();

    /**
     * @brief updateView    更新设置数据到界面上
     */
    void updateView();

    /**
     * @brief resizeView    初始化界面的行数大小
     */
    void resizeView();

    void changeLanguage();

    void initialDisplayStyle(int styleId);

public:
    time_t messageTime;//需要后期再改动

    struct tm* tm_messageTime;

    /**
     * @brief message　所有机器人消息
     */
    QVector <Message> message;

    /**
     * @brief selectMessage　筛选显示的机器人信息
     */
    QVector <Message> selectMessage;
    QVector <QString> tmpMsgTime;//缓存时间string,减少重复的int转string
    QVector <QString> tmpMsgTime_day;//缓存时间string,减少重复的int转string

    /**
     * @brief robotIdName　机器人ID与机器人名称
     */
    QVector<struct RobotIdName> robotIdName;
    /**
     * @brief currentRobotId　当前机器人ID号
     */
    int currentRobotId;

    /**
     * @brief robotName　机器人名称
     */
    QString robotName;

    /**
     * @brief errorFlag　错误消息显示标志 0:隐藏 1:显示
     */
    int errorFlag;

    /**
     * @brief warnFlag　警告消息显示标志
     */
    int warnFlag;

    /**
     * @brief noteFlag　提示消息显示标志
     */
    int noteFlag;

    /**
     * @brief waitFlag　等待消息显示标志
     */
    int waitFlag;

    /**
     * @brief showType  消息显示类型　０：显示当前机器人　１：显示全部机器人
     */
    int showType;

    /**
     * @brief messageLevelPicture　消息级别图标地址
     */
    QVector <QString> messageLevelPicture;

    /**
     * @brief startDate　开始日期
     */
    QDate startDate;
    /**
     * @brief endDate　结束日期
     */
    QDate endDate;

    /**
     * @brief startCalendar　开始日期选择日历
     */
    QCalendarWidget *startCalendar;
    /**
     * @brief endCalendar　结束日期选择日历
     */
    QCalendarWidget *endCalendar;

signals:
    /**
     * @brief showCurrentRobotMessage　显示当前机器人消息信号函数
     * @param currentRobotId　当前机器人ID
     */
    void showCurrentRobotMessage();

    /**
     * @brief showAllRobotMessage　显示全部机器人消息信号函数
     */
    void showAllRobotMessage();

    /**
     * @brief errorMessageShowOrHide　错误消息显示与否信号函数
     * @param errorFlag　错误消息显示与否标志
     */
    void errorMessageShowOrHide(int errorFlag);

    /**
     * @brief warnMessageShowOrHide　警告消息显示与否信号函数
     * @param warnFlag　警告消息显示与否标志
     */
    void warnMessageShowOrHide(int warnFlag);

    /**
     * @brief noteMessageShowOrHide　提示消息显示与否信号函数
     * @param noteFlag　提示消息显示与否标志
     */
    void noteMessageShowOrHide(int noteFlag);

    /**
     * @brief waitMessageShowOrHide　等待消息显示与否信号函数
     * @param waitFlag　等待消息显示与否标志
     */
    void waitMessageShowOrHide(int waitFlag);

    /**
     * @brief startDateChanged　开始日期修改信号函数
     * @param startDate　要更改的开始日期
     */
    void startDateChanged(QDate startDate);
    /**
     * @brief endDateChanged　结束日期修改信号函数
     * @param endDate　要修改的结束日期
     */
    void endDateChanged(QDate endDate);

private slots:
    /**
     * @brief on_startCalendar_Btn_clicked　开始日期日历显示槽函数
     */
    void on_startCalendar_Btn_clicked();

    /**
     * @brief on_endCalendar_Btn_clicked　结束日期日历显示槽函数
     */
    void on_endCalendar_Btn_clicked();

    /**
     * @brief on_currentRobot_rBtn_clicked　显示当前机器人消息槽函数
     */
    void on_currentRobot_rBtn_clicked();

    /**
     * @brief on_allRobot_rBtn_clicked　显示全部机器人消息槽函数
     */
    void on_allRobot_rBtn_clicked();

    /**
     * @brief on_error_checkBox_clicked　错误消息显示与否槽函数
     */
    void on_error_checkBox_clicked();

    /**
     * @brief on_warn_checkBox_clicked　警告消息显示与否槽函数
     */
    void on_warn_checkBox_clicked();

    /**
     * @brief on_note_checkBox_clicked　提示消息显示与否槽函数
     */
    void on_note_checkBox_clicked();

    /**
     * @brief on_wait_checkBox_clicked　等待消息显示与否槽函数
     */
    void on_wait_checkBox_clicked();

    /**
     * @brief startDateChanged　日历更改开始日期槽函数
     */
    void startDateChanged();

    /**
     * @brief endDateChanged　日历更改结束日期槽函数
     */
    void endDateChanged();

    /**
     * @brief on_start_dateEdit_dateChanged　更改开始日期槽函数
     * @param date　更改的日期
     */
    void on_start_dateEdit_dateChanged(const QDate &date);

    /**
     * @brief on_end_dateEdit_dateChanged　更改结束日期槽函数
     * @param date　更改的日期
     */
    void on_end_dateEdit_dateChanged(const QDate &date);

private slots:
    void on_returnBtn_clicked();

private:
    Ui::DeviceLogDialog *ui;
};

#endif // DEVICELOGDIALOG_H
